﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Bibilioteca.DataAccess;
using Bibilioteca.Models;
using System.Data;

namespace Bibilioteca.Dominio
{
    public class NegocioCatalogos
    {

        private CatalogosDao catalogosDao;

        public NegocioCatalogos()
        {
            catalogosDao = new CatalogosDao();
        }

        /*
         * Genera a partir de un dataTable un LinkedList.
         * Esto es simplemente porque desde la vista no se puede iterar
         * sobre un datatable, se necesita una coleccion de catalogos.
         */
        private LinkedList<Catalogo> generarListaCatalogos(DataTable tabla)
        {
            LinkedList<Catalogo> retorno = new LinkedList<Catalogo>();
            foreach (DataRow row in tabla.Rows)
            {
                Catalogo s = new Catalogo((int)row["catalogo_id"], (string)row["catalogo_nombre"]);
                retorno.AddLast(s);
            }
            return retorno;
        }

        /*
         * Retorna una lista enlazada de todos los catalogos en la BD.
         */
        public LinkedList<Catalogo> todosLosCatalogos()
        {
            return generarListaCatalogos(catalogosDao.todosLosCatalogos());
        }

        /*
         * Dado un numero de catalogo lo busca en la BD y lo retorna.
         */
        public Catalogo GetCatalogoNumero(string id)
        {
            catalogosDao.paramID = Convert.ToInt32(id.Trim());
            DataTable catalogoTable = catalogosDao.GetCatalogoNumero();
            foreach (DataRow row in catalogoTable.Rows)
            {
                Catalogo s = new Catalogo((int)row["catalogo_id"], (string)row["catalogo_nombre"]);
                return s;
            }
            return new Catalogo(0, "No existe");
        }


        /*
         * Retorna el catalogo de un material dado.
         */
        public Catalogo GetCatalogoDeMaterial(string id)
        {
            foreach (Catalogo m in generarListaCatalogos(catalogosDao.catalogoDeMaterial(id)))
            {
                return m;
            }
            return null;
        }


        public void modificarCatalogo(Catalogo catalogo)
        {
            catalogosDao.paramID = catalogo.Id;
            catalogosDao.nombre = catalogo.Nombre;

            if (catalogo != null && catalogo.Id != 0)
                catalogosDao.modificarCatalogo();
        }

        public void insertarCatalogo(Catalogo catalogo)
        {
            catalogosDao.nombre = catalogo.Nombre;

            catalogosDao.insertarCatalogo();
        }

        public void eliminarCatalogo(int id)
        {
            catalogosDao.paramID = id;
            if (id != 0)
                catalogosDao.eliminarCatalogo();
        }

    }
}